#coding=utf-8
#联系方式 qq:638476

#  1.简述普通参数、默认参数、关键字参数、动态收集参数的区别,理解为主


# 1)普通参数：是指没有默认值的参数，调用方法的时候必须传入的参数，否则会执行异常
# 2）默认参数：是指制定了默认值的参数，调用方法的时候可以不传入该参数，则使用的是声明方法时的默认值
#     如果传入了对应的值，那么调用方法的时候将会用传入进来的参数值替代指定的默认值进行运算
# 3)关键字参数：是指调用函数的时候指定函数的各个参数对应的值，
# 这样可以无视参数声明的顺序，但是参数名字要和函数中声明的名字一样
# 4）动态收集参数：是指可以不指定传入的参数的个数，如果是一个”*“指定的参数，
# 当调用方法传入n个参数时，这n个参数将会被收集到一个元组里面；
#     如果是两个星号"**"指定的收集参数，则其接受的单个参数为字典对象，
# 函数会将传入的各个字典对象收集到一个字典中以供使用,有默认值()和{}
#
#
#
# 2.def foo(x, y, z, *args, **kw):
#     sum = x + y + z
#     print(sum)
#     for i in args:
#         print(i)
#     print(kw)
#     for j in kw.items():
#         print(j)
# a_tuple = (1,2,3)     此处参数修改为2个看看会怎么样?
# b_dict = {'name': 'jim', 'age': 28, 'add': '上海'}
#                    #a_tuple的元素，会按顺序赋值给x,y,z；b_dict的元素会在函数内部自动组装为一个dict
# foo(*a_tuple, **b_dict)    分析这里会怎么样?
#                   由于a_tuple只有三个元素，赋值给三个必选参数后,已经没了，所以args为空，b_dict赋值给kw
#
#
#
# 3.题目:执行分析下代码
#     def func(a, b, c=9, *args, **kw):
#          print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
#     func(1,2)
#     func(1,2,3)
#     func(1,2,3,4)
#     func(1,2,3,4,5)
#     func(1,2,3,4,5,6,name='jim')
#     func(1,2,3,4,5,6,name='tom',age=22)
#     扩展: 如果把你的函数也定义成  def  get_sum(*args,**kw):pass
#     你的函数可以接受多少参数?
# func(1, 2) # 分别传给对应的参数a,b
# func(1, 2, 3) # 分别传给对应的参a,b,c
# func(1, 2, 3, 4) # 前三个分别传给参数 a，b，c，第四个参数不是字典对象，收集到动态参数args
# func(1, 2, 3, 4, 5)# 前三个分别传给参数 a，b，c，第四、五个参数不是字典对象，收集到动态参数args
# func(1, 2, 3, 4, 5, 6, name='jim')# 前三个分别传给参数 a，b，c，第四、五、六个参数不是字典对象，
# 收集到动态参数args,最后一个是字典对象，收集到参数kw
# func(1, 2, 3, 4, 5, 6, name='tom', age=22)# 前三个分别传给参数 a，b，c，
# 第四、五、六个参数不是字典对象，收集到动态参数args,最后两个是字典对象，收集到参数kw
#
# 4.写一个函数函数，计算传入字符串中的数字、字母、空格和其他的个数分别为多少?
# def string(*a_list):
#     num = 0
#     num1 = 0
#     num2 = 0
#     num3 = 0
#     for i in a_list:
#         #print i
#         if ("z">=i>="a"):
#             num =num+1
#         elif ("9">=i>="0"):
#             num1=num1+1
#         elif(i==" "):
#             num2=num2+1
#         else:
#             num3=num3+1
#     print ("字母：%d "%num,"数字: %d "%num1,"空格：%d"%num2,"其他: %d "%num3)
# a_list ="wer13434 34f234 234t24 rg23 ;'"
# string(*a_list)
